//
// Created by Administrator on 2023/11/4.
/*
 * http://ybt.ssoier.cn:8088/problem_show.php?pid=1223
 * 通过
 * 1223：An Easy Problem

时间限制: 1000 ms         内存限制: 65536 KB
【题目描述】
给定一个正整数N，求最小的、比N大的正整数M，使得M与N的二进制表示中有相同数目的1。

举个例子，假如给定的N为78，其二进制表示为1001110，包含4个1，那么最小的比N大的并且二进制表示中只包含4个1的数是83，其二进制是1010011，因此83就是答案。

【输入】
输入若干行，每行一个数n(1≤n≤1000000)，输入"0"结束。

【输出】
输出若干行对应的值。

【输入样例】
1
2
3
4
78
0
【输出样例】
2
4
5
8
83
思路：直接求1的个数

 * */
//

#include <iostream>
using namespace std;

// 计算n有几个1
int ones(int n)
{
    int count=0;
    while(n)
    {
        // (n&-n) 会得到n的最后一个1
        int nn = (n&-n);
        // n 再减去 (n&-n) 相当于n少了最后一个1
        n-=nn;
        count++;
    }
    return count;
}

int nextNum(int n)
{
    // 要返回的值
    int ret=n+1;
    int oneTimes = ones(n);
    while(ones(ret)!=oneTimes)
    {
        ret++;
    }
    return ret;
}
int main()
{
    int n;
    cin>>n;
    while(n!=0)
    {
        cout<<nextNum(n)<<endl;
        cin>>n;
    }
    return 0;
}